package muhnes.sizoo.dal;

import muhnes.sizoo.HibernateUtilZoologia;
import muhnes.sizoo.modelo.Areaprotegida;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 * Clase donde se implementan los metodos definidos en AreaprotegidaDao
 * @author Ricardo Orellana
 */
public class AreaprotegidaDaoImpl extends GenericoDAO< Areaprotegida, Integer >  
                                  implements AreaprotegidaDao {
    
    public AreaprotegidaDaoImpl() {
        super( HibernateUtilZoologia.getSessionFactory() );
    }
    
    @Override
    protected Class<?> getClaseEntidad () {
        return Areaprotegida.class;
    }

    /**
     * Método que verifica si las areas protegidas son unicas.
     *  
     */
    @Override
    public boolean verificarUnicidad(Areaprotegida entidad) {
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Areaprotegida where codigoarea != :codigo " + 
                     "and upper(nombre) = :nombre";
        Query consulta = sesion.createQuery( hql );
        consulta.setParameter("codigo",entidad.getCodigoarea());
        consulta.setParameter("nombre", entidad.getNombre().toUpperCase());
        return consulta.uniqueResult() != null ? true : false;
    }

     /**
     * Método que verifica si la entidad es independiente de las demas entidades
     *  
     */
    @Override
    public boolean verificarDependencia (Areaprotegida entidad) {
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Reserva where areaprotegida.codigoarea = :codigo";
        Query consulta = sesion.createQuery( hql );
        consulta.setParameter("codigo",entidad.getCodigoarea());
        return !consulta.list().isEmpty();
    }
    
}
